/*
 Validform version 5.3.2
 By sean during April 7, 2010 - March 26, 2013
 For more information, please visit http://validform.rjboy.cn
 Validform is available under the terms of the MIT license.
 */

(function(d, f, b) {
	var g = null,
		j = null,
		i = true;
	var e = {
		tit: "提示信息",
		w: {
			"*": "不能为空！",
			"*6-16": "请填写6到16位任意字符！",
			"n": "请填写数字！",
			"n6-16": "请填写6到16位数字！",
			"s": "不能输入特殊字符！",
			"s6-18": "请填写6到18位字符！",
			"p": "请填写邮政编码！",
			"m": "请填写手机号码！",
			"e": "邮箱地址格式不对！",
			"url": "请填写网址！",
			"price": "请填写正确价格！",
		},
		def: "请填写正确信息！",
		undef: "datatype未定义！",
		reck: "两次输入的内容不一致！",
		r: "通过信息验证！",
		c: "正在检测信息…",
		s: "请{填写|选择}{0|信息}！",
		v: "所填信息没有经过验证，请稍后…",
		p: "正在提交数据…"
	};
	d.Tipmsg = e;
	var a = function(l, n, k) {
		var n = d.extend({},
			a.defaults, n);
		n.datatype && d.extend(a.util.dataType, n.datatype);
		var m = this;
		m.tipmsg = {
			w: {}
		};
		m.forms = l;
		m.objects = [];
		if (k === true) {
			return false
		}
		l.each(function() {
			if (this.validform_inited == "inited") {
				return true
			}
			this.validform_inited = "inited";
			var p = this;
			p.settings = d.extend({},
				n);
			var o = d(p);
			p.validform_status = "normal";
			o.data("tipmsg", m.tipmsg);
			o.delegate("[datatype]", "blur",
				function() {
					var q = arguments[1];
					a.util.check.call(this, o, q)
				});
			o.delegate(":text", "keypress",
				function(q) {
					if (q.keyCode == 13 && o.find(":submit").length == 0) {
						o.submit()
					}
				});
			a.util.enhance.call(o, p.settings.tiptype, p.settings.usePlugin, p.settings.tipSweep);
			p.settings.btnSubmit && o.find(p.settings.btnSubmit).bind("click",
				function() {
					o.trigger("submit");
					return false
				});
			o.submit(function() {
				var q = a.util.submitForm.call(o, p.settings);
				q === b && (q = true);
				return q
			});
			o.find("[type='reset']").add(o.find(p.settings.btnReset)).bind("click",
				function() {
					a.util.resetForm.call(o)
				})
		});
		if (n.tiptype == 1 || (n.tiptype == 2 || n.tiptype == 3) && n.ajaxPost) {
			c()
		}
	};
	a.defaults = {
		tiptype: 1,
		tipSweep: false,
		showAllError: false,
		postonce: false,
		ajaxPost: false
	};
	a.util = {
		dataType: {
			"*": /[\w\W]+/,
			"*6-16": /^[\w\W]{6,16}$/,
			n: /^\d+$/,
			"n6-16": /^\d{6,16}$/,
			s: /^[\u4E00-\u9FA5\uf900-\ufa2d\w\.\s]+$/,
			"s6-18": /^[\u4E00-\u9FA5\uf900-\ufa2d\w\.\s]{6,18}$/,
			p: /^[0-9]{6}$/,
			m: /^13[0-9]{9}$|14[0-9]{9}|15[0-9]{9}|17[0-9]{9}$|18[0-9]{9}$/,
			e: /^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/,
			url: /^(\w+:\/\/)?\w+(\.\w+)+.*$/,
			price: /^(\d*\.\d{0,2}|\d+).*$/,
			empty: /^\s*$/,
		},
		toString: Object.prototype.toString,
		isEmpty: function(k) {
			return k === "" || k === d.trim(this.attr("tip"))
		},
		getValue: function(m) {
			var l, k = this;
			if (m.is(":radio")) {
				l = k.find(":radio[name='" + m.attr("name") + "']:checked").val();
				l = l === b ? "": l
			} else {
				if (m.is(":checkbox")) {
					l = "";
					k.find(":checkbox[name='" + m.attr("name") + "']:checked").each(function() {
						l += d(this).val() + ","
					});
					l = l === b ? "": l
				} else {
					l = m.val()
				}
			}
			l = d.trim(l);
			return a.util.isEmpty.call(m, l) ? "": l
		},
		enhance: function(l, m, n, k) {
			var o = this;
			o.find("[datatype]").each(function() {
				if (l == 2) {
					if (d(this).parent().next().find(".Validform_checktip").length == 0) {
						d(this).parent().next().append("<span class='Validform_checktip' />");
						d(this).siblings(".Validform_checktip").remove()
					}
				} else {
					if (l == 3 || l == 4) {
						if (d(this).siblings(".Validform_checktip").length == 0) {
							d(this).parent().append("<span class='Validform_checktip' />");
							d(this).parent().next().find(".Validform_checktip").remove()
						}
					}
				}
			});
			o.find("input[recheck]").each(function() {
				if (this.validform_inited == "inited") {
					return true
				}
				this.validform_inited = "inited";
				var q = d(this);
				var p = o.find("input[name='" + d(this).attr("recheck") + "']");
				p.bind("keyup",
					function() {
						if (p.val() == q.val() && p.val() != "") {
							if (p.attr("tip")) {
								if (p.attr("tip") == p.val()) {
									return false
								}
							}
							q.trigger("blur")
						}
					}).bind("blur",
					function() {
						if (p.val() != q.val() && q.val() != "") {
							if (q.attr("tip")) {
								if (q.attr("tip") == q.val()) {
									return false
								}
							}
							q.trigger("blur")
						}
					})
			});
			o.find("[tip]").each(function() {
				if (this.validform_inited == "inited") {
					return true
				}
				this.validform_inited = "inited";
				var q = d(this).attr("tip");
				var p = d(this).attr("altercss");
				d(this).focus(function() {
					if (d(this).val() == q) {
						d(this).val("");
						if (p) {
							d(this).removeClass(p)
						}
					}
				}).blur(function() {
					if (d.trim(d(this).val()) === "") {
						d(this).val(q);
						if (p) {
							d(this).addClass(p)
						}
					}
				})
			});
			o.find(":checkbox[datatype],:radio[datatype]").each(function() {
				if (this.validform_inited == "inited") {
					return true
				}
				this.validform_inited = "inited";
				var q = d(this);
				var p = q.attr("name");
				o.find("[name='" + p + "']").filter(":checkbox,:radio").bind("click",
					function() {
						setTimeout(function() {
								q.trigger("blur")
							},
							0)
					})
			});
			o.find("select[datatype][multiple]").bind("click",
				function() {
					var p = d(this);
					setTimeout(function() {
							p.trigger("blur")
						},
						0)
				});
			a.util.usePlugin.call(o, m, l, n, k)
		},
		usePlugin: function(o, l, n, r) {
			var s = this,
				o = o || {};
			if (s.find("input[plugin='swfupload']").length && typeof(swfuploadhandler) != "undefined") {
				var k = {
					custom_settings: {
						form: s,
						showmsg: function(v, t, u) {
							a.util.showmsg.call(s, v, l, {
								obj: s.find("input[plugin='swfupload']"),
								type: t,
								sweep: n
							})
						}
					}
				};
				k = d.extend(true, {},
					o.swfupload, k);
				s.find("input[plugin='swfupload']").each(function(t) {
					if (this.validform_inited == "inited") {
						return true
					}
					this.validform_inited = "inited";
					d(this).val("");
					swfuploadhandler.init(k, t)
				})
			}
			if (s.find("input[plugin='datepicker']").length && d.fn.datePicker) {
				o.datepicker = o.datepicker || {};
				if (o.datepicker.format) {
					Date.format = o.datepicker.format;
					delete o.datepicker.format
				}
				if (o.datepicker.firstDayOfWeek) {
					Date.firstDayOfWeek = o.datepicker.firstDayOfWeek;
					delete o.datepicker.firstDayOfWeek
				}
				s.find("input[plugin='datepicker']").each(function(t) {
					if (this.validform_inited == "inited") {
						return true
					}
					this.validform_inited = "inited";
					o.datepicker.callback && d(this).bind("dateSelected",
						function() {
							var u = new Date(d.event._dpCache[this._dpId].getSelected()[0]).asString(Date.format);
							o.datepicker.callback(u, this)
						});
					d(this).datePicker(o.datepicker)
				})
			}
			if (s.find("input[plugin*='passwordStrength']").length && d.fn.passwordStrength) {
				o.passwordstrength = o.passwordstrength || {};
				o.passwordstrength.showmsg = function(u, v, t) {
					a.util.showmsg.call(s, v, l, {
						obj: u,
						type: t,
						sweep: n
					})
				};
				s.find("input[plugin='passwordStrength']").each(function(t) {
					if (this.validform_inited == "inited") {
						return true
					}
					this.validform_inited = "inited";
					d(this).passwordStrength(o.passwordstrength)
				})
			}
			if (r != "addRule" && o.jqtransform && d.fn.jqTransSelect) {
				if (s[0].jqTransSelected == "true") {
					return
				}
				s[0].jqTransSelected = "true";
				var m = function(t) {
					var u = d(".jqTransformSelectWrapper ul:visible");
					u.each(function() {
						var v = d(this).parents(".jqTransformSelectWrapper:first").find("select").get(0);
						if (! (t && v.oLabel && v.oLabel.get(0) == t.get(0))) {
							d(this).hide()
						}
					})
				};
				var p = function(t) {
					if (d(t.target).parents(".jqTransformSelectWrapper").length === 0) {
						m(d(t.target))
					}
				};
				var q = function() {
					d(document).mousedown(p)
				};
				if (o.jqtransform.selector) {
					s.find(o.jqtransform.selector).filter('input:submit, input:reset, input[type="button"]').jqTransInputButton();
					s.find(o.jqtransform.selector).filter("input:text, input:password").jqTransInputText();
					s.find(o.jqtransform.selector).filter("input:checkbox").jqTransCheckBox();
					s.find(o.jqtransform.selector).filter("input:radio").jqTransRadio();
					s.find(o.jqtransform.selector).filter("textarea").jqTransTextarea();
					if (s.find(o.jqtransform.selector).filter("select").length > 0) {
						s.find(o.jqtransform.selector).filter("select").jqTransSelect();
						q()
					}
				} else {
					s.jqTransform()
				}
				s.find(".jqTransformSelectWrapper").find("li a").click(function() {
					d(this).parents(".jqTransformSelectWrapper").find("select").trigger("blur")
				})
			}
		},
		getNullmsg: function(o) {
			var n = this;
			var m = /[\u4E00-\u9FA5\uf900-\ufa2da-zA-Z\s]+/g;
			var k;
			var l = o[0].settings.label || ".Validform_label";
			l = n.siblings(l).eq(0).text() || n.siblings().find(l).eq(0).text() || n.parent().siblings(l).eq(0).text() || n.parent().siblings().find(l).eq(0).text();
			l = l.replace(/\s(?![a-zA-Z])/g, "").match(m);
			l = l ? l.join("") : [""];
			m = /\{(.+)\|(.+)\}/;
			k = o.data("tipmsg").s || e.s;
			if (l != "") {
				k = k.replace(/\{0\|(.+)\}/, l);
				if (n.attr("recheck")) {
					k = k.replace(/\{(.+)\}/, "");
					n.attr("nullmsg", k);
					return k
				}
			} else {
				k = n.is(":checkbox,:radio,select") ? k.replace(/\{0\|(.+)\}/, "") : k.replace(/\{0\|(.+)\}/, "$1")
			}
			k = n.is(":checkbox,:radio,select") ? k.replace(m, "$2") : k.replace(m, "$1");
			n.attr("nullmsg", k);
			return k
		},
		getErrormsg: function(s, n, u) {
			var o = /^(.+?)((\d+)-(\d+))?$/,
				m = /^(.+?)(\d+)-(\d+)$/,
				l = /(.*?)\d+(.+?)\d+(.*)/,
				q = n.match(o),
				t,
				r;
			if (u == "recheck") {
				r = s.data("tipmsg").reck || e.reck;
				return r
			}
			var p = d.extend({},
				e.w, s.data("tipmsg").w);
			if (q[0] in p) {
				return s.data("tipmsg").w[q[0]] || e.w[q[0]]
			}
			for (var k in p) {
				if (k.indexOf(q[1]) != -1 && m.test(k)) {
					r = (s.data("tipmsg").w[k] || e.w[k]).replace(l, "$1" + q[3] + "$2" + q[4] + "$3");
					s.data("tipmsg").w[q[0]] = r;
					return r
				}
			}
			return s.data("tipmsg").def || e.def
		},
		_regcheck: function(t, n, u, A) {
			var A = A,
				y = null,
				v = false,
				o = /\/.+\//g,
				k = /^(.+?)(\d+)-(\d+)$/,
				l = 3;
			if (o.test(t)) {
				var s = t.match(o)[0].slice(1, -1);
				var r = t.replace(o, "");
				var q = RegExp(s, r);
				v = q.test(n)
			} else {
				if (a.util.toString.call(a.util.dataType[t]) == "[object Function]") {
					v = a.util.dataType[t](n, u, A, a.util.dataType);
					if (v === true || v === b) {
						v = true
					} else {
						y = v;
						v = false
					}
				} else {
					if (! (t in a.util.dataType)) {
						var m = t.match(k),
							z;
						if (!m) {
							v = false;
							y = A.data("tipmsg").undef || e.undef
						} else {
							for (var B in a.util.dataType) {
								z = B.match(k);
								if (!z) {
									continue
								}
								if (m[1] === z[1]) {
									var w = a.util.dataType[B].toString(),
										r = w.match(/\/[mgi]*/g)[1].replace("/", ""),
										x = new RegExp("\\{" + z[2] + "," + z[3] + "\\}", "g");
									w = w.replace(/\/[mgi]*/g, "/").replace(x, "{" + m[2] + "," + m[3] + "}").replace(/^\//, "").replace(/\/$/, "");
									a.util.dataType[t] = new RegExp(w, r);
									break
								}
							}
						}
					}
					if (a.util.toString.call(a.util.dataType[t]) == "[object RegExp]") {
						v = a.util.dataType[t].test(n)
					}
				}
			}
			if (v) {
				l = 2;
				y = u.attr("sucmsg") || A.data("tipmsg").r || e.r;
				if (u.attr("recheck")) {
					var p = A.find("input[name='" + u.attr("recheck") + "']:first");
					if (n != p.val()) {
						v = false;
						l = 3;
						y = u.attr("errormsg") || a.util.getErrormsg.call(u, A, t, "recheck")
					}
				}
			} else {
				y = y || u.attr("errormsg") || a.util.getErrormsg.call(u, A, t);
				if (a.util.isEmpty.call(u, n)) {
					y = u.attr("nullmsg") || a.util.getNullmsg.call(u, A)
				}
			}
			return {
				passed: v,
				type: l,
				info: y
			}
		},
		regcheck: function(n, s, m) {
			var t = this,
				k = null,
				l = false,
				r = 3;
			if (m.attr("ignore") === "ignore" && a.util.isEmpty.call(m, s)) {
				if (m.data("cked")) {
					k = ""
				}
				return {
					passed: true,
					type: 4,
					info: k
				}
			}
			m.data("cked", "cked");
			var u = a.util.parseDatatype(n);
			var q;
			for (var p = 0; p < u.length; p++) {
				for (var o = 0; o < u[p].length; o++) {
					q = a.util._regcheck(u[p][o], s, m, t);
					if (!q.passed) {
						break
					}
				}
				if (q.passed) {
					break
				}
			}
			return q
		},
		parseDatatype: function(r) {
			var q = /\/.+?\/[mgi]*(?=(,|$|\||\s))|[\w\*-]+/g,
				o = r.match(q),
				p = r.replace(q, "").replace(/\s*/g, "").split(""),
				l = [],
				k = 0;
			l[0] = [];
			l[0].push(o[0]);
			for (var s = 0; s < p.length; s++) {
				if (p[s] == "|") {
					k++;
					l[k] = []
				}
				l[k].push(o[s + 1])
			}
			return l
		},
		showmsg: function(n, l, m, k) {
			if (n == b) {
				return
			}
			if (k == "bycheck" && m.sweep && (m.obj && !m.obj.is(".Validform_error") || typeof l == "function")) {
				return
			}
			d.extend(m, {
				curform: this
			});
			if (typeof l == "function") {
				l(n, m, a.util.cssctl);
				return
			}
			if (l == 1 || k == "byajax" && l != 4) {
				j.find(".Validform_info").html(n)
			}
			if (l == 1 && k != "bycheck" && m.type != 2 || k == "byajax" && l != 4) {
				i = false;
				j.find(".iframe").css("height", j.outerHeight());
				j.show();
				h(j, 100)
			}
			if (l == 2 && m.obj) {
				m.obj.parent().next().find(".Validform_checktip").html(n);
				a.util.cssctl(m.obj.parent().next().find(".Validform_checktip"), m.type)
			}
			if ((l == 3 || l == 4) && m.obj) {
				m.obj.siblings(".Validform_checktip").html(n);
				a.util.cssctl(m.obj.siblings(".Validform_checktip"), m.type)
			}
		},
		cssctl: function(l, k) {
			switch (k) {
				case 1:
					l.removeClass("Validform_right Validform_wrong").addClass("Validform_checktip Validform_loading");
					break;
				case 2:
					l.removeClass("Validform_wrong Validform_loading").addClass("Validform_checktip Validform_right");
					break;
				case 4:
					l.removeClass("Validform_right Validform_wrong Validform_loading").addClass("Validform_checktip");
					break;
				default:
					l.removeClass("Validform_right Validform_loading").addClass("Validform_checktip Validform_wrong")
			}
		},
		check: function(v, t, n) {
			var o = v[0].settings;
			var t = t || "";
			var k = a.util.getValue.call(v, d(this));
			if (o.ignoreHidden && d(this).is(":hidden") || d(this).data("dataIgnore") === "dataIgnore") {
				return true
			}
			if (o.dragonfly && !d(this).data("cked") && a.util.isEmpty.call(d(this), k) && d(this).attr("ignore") != "ignore") {
				return false
			}
			var s = a.util.regcheck.call(v, d(this).attr("datatype"), k, d(this));
			if (k == this.validform_lastval && !d(this).attr("recheck") && t == "") {
				return s.passed ? true: false
			}
			this.validform_lastval = k;
			var r;
			g = r = d(this);
			if (!s.passed) {
				a.util.abort.call(r[0]);
				if (!n) {
					a.util.showmsg.call(v, s.info, o.tiptype, {
							obj: d(this),
							type: s.type,
							sweep: o.tipSweep
						},
						"bycheck"); ! o.tipSweep && r.addClass("Validform_error")
				}
				return false
			}
			var q = d(this).attr("ajaxurl");
			if (q && !a.util.isEmpty.call(d(this), k) && !n) {
				var m = d(this);
				if (t == "postform") {
					m[0].validform_subpost = "postform"
				} else {
					m[0].validform_subpost = ""
				}
				if (m[0].validform_valid === "posting" && k == m[0].validform_ckvalue) {
					return "ajax"
				}
				m[0].validform_valid = "posting";
				m[0].validform_ckvalue = k;
				a.util.showmsg.call(v, v.data("tipmsg").c || e.c, o.tiptype, {
						obj: m,
						type: 1,
						sweep: o.tipSweep
					},
					"bycheck");
				a.util.abort.call(r[0]);
				var u = d.extend(true, {},
					o.ajaxurl || {});
				var p = {
					type: "POST",
					cache: false,
					url: q,
					data: "param=" + encodeURIComponent(k) + "&name=" + encodeURIComponent(d(this).attr("name")),
					success: function(x) {
						if (d.trim(x.status) === "y") {
							m[0].validform_valid = "true";
							x.info && m.attr("sucmsg", x.info);
							a.util.showmsg.call(v, m.attr("sucmsg") || v.data("tipmsg").r || e.r, o.tiptype, {
									obj: m,
									type: 2,
									sweep: o.tipSweep
								},
								"bycheck");
							r.removeClass("Validform_error");
							g = null;
							if (m[0].validform_subpost == "postform") {
								v.trigger("submit")
							}
						} else {
							m[0].validform_valid = x.info;
							a.util.showmsg.call(v, x.info, o.tiptype, {
								obj: m,
								type: 3,
								sweep: o.tipSweep
							});
							r.addClass("Validform_error")
						}
						r[0].validform_ajax = null
					},
					error: function(x) {
						if (x.status == "200") {
							if (x.responseText == "y") {
								u.success({
									status: "y"
								})
							} else {
								u.success({
									status: "n",
									info: x.responseText
								})
							}
							return false
						}
						if (x.statusText !== "abort") {
							var y = "status: " + x.status + "; statusText: " + x.statusText;
							a.util.showmsg.call(v, y, o.tiptype, {
								obj: m,
								type: 3,
								sweep: o.tipSweep
							});
							r.addClass("Validform_error")
						}
						m[0].validform_valid = x.statusText;
						r[0].validform_ajax = null;
						return true
					}
				};
				if (u.success) {
					var w = u.success;
					u.success = function(x) {
						p.success(x);
						w(x, m)
					}
				}
				if (u.error) {
					var l = u.error;
					u.error = function(x) {
						p.error(x) && l(x, m)
					}
				}
				u = d.extend({},
					p, u, {
						dataType: "json"
					});
				r[0].validform_ajax = d.ajax(u);
				return "ajax"
			} else {
				if (q && a.util.isEmpty.call(d(this), k)) {
					a.util.abort.call(r[0]);
					r[0].validform_valid = "true"
				}
			}
			if (!n) {
				a.util.showmsg.call(v, s.info, o.tiptype, {
						obj: d(this),
						type: s.type,
						sweep: o.tipSweep
					},
					"bycheck");
				r.removeClass("Validform_error")
			}
			g = null;
			return true
		},
		submitForm: function(o, l, k, r, t) {
			var w = this;
			if (w[0].validform_status === "posting") {
				return false
			}
			if (o.postonce && w[0].validform_status === "posted") {
				return false
			}
			var v = o.beforeCheck && o.beforeCheck(w);
			if (v === false) {
				return false
			}
			var s = true,
				n;
			w.find("[datatype]").each(function() {
				if (l) {
					return false
				}
				if (o.ignoreHidden && d(this).is(":hidden") || d(this).data("dataIgnore") === "dataIgnore") {
					return true
				}
				var z = a.util.getValue.call(w, d(this)),
					A;
				g = A = d(this);
				n = a.util.regcheck.call(w, d(this).attr("datatype"), z, d(this));
				if (!n.passed) {
					a.util.showmsg.call(w, n.info, o.tiptype, {
						obj: d(this),
						type: n.type,
						sweep: o.tipSweep
					});
					A.addClass("Validform_error");
					if (!o.showAllError) {
						A.focus();
						s = false;
						return false
					}
					s && (s = false);
					return true
				}
				if (d(this).attr("ajaxurl") && !a.util.isEmpty.call(d(this), z)) {
					if (this.validform_valid !== "true") {
						var y = d(this);
						a.util.showmsg.call(w, w.data("tipmsg").v || e.v, o.tiptype, {
							obj: y,
							type: 3,
							sweep: o.tipSweep
						});
						A.addClass("Validform_error");
						y.trigger("blur", ["postform"]);
						if (!o.showAllError) {
							s = false;
							return false
						}
						s && (s = false);
						return true
					}
				} else {
					if (d(this).attr("ajaxurl") && a.util.isEmpty.call(d(this), z)) {
						a.util.abort.call(this);
						this.validform_valid = "true"
					}
				}
				a.util.showmsg.call(w, n.info, o.tiptype, {
					obj: d(this),
					type: n.type,
					sweep: o.tipSweep
				});
				A.removeClass("Validform_error");
				g = null
			});
			if (o.showAllError) {
				w.find(".Validform_error:first").focus()
			}
			if (s) {
				var q = o.beforeSubmit && o.beforeSubmit(w);
				if (q === false) {
					return false
				}
				w[0].validform_status = "posting";
				if (o.ajaxPost || r === "ajaxPost") {
					var u = d.extend(true, {},
						o.ajaxpost || {});
					u.url = k || u.url || o.url || w.attr("action");
					a.util.showmsg.call(w, w.data("tipmsg").p || e.p, o.tiptype, {
							obj: w,
							type: 1,
							sweep: o.tipSweep
						},
						"byajax");
					if (t) {
						u.async = false
					} else {
						if (t === false) {
							u.async = true
						}
					}
					if (u.success) {
						var x = u.success;
						u.success = function(y) {
							o.callback && o.callback(y);
							w[0].validform_ajax = null;
							if (d.trim(y.status) === "y") {
								w[0].validform_status = "posted"
							} else {
								w[0].validform_status = "normal"
							}
							x(y, w)
						}
					}
					if (u.error) {
						var m = u.error;
						u.error = function(y) {
							o.callback && o.callback(y);
							w[0].validform_status = "normal";
							w[0].validform_ajax = null;
							m(y, w)
						}
					}
					var p = {
						type: "POST",
						async: true,
						data: w.serializeArray(),
						success: function(y) {
							if (d.trim(y.status) === "y") {
								w[0].validform_status = "posted";
								a.util.showmsg.call(w, y.info, o.tiptype, {
										obj: w,
										type: 2,
										sweep: o.tipSweep
									},
									"byajax")
							} else {
								w[0].validform_status = "normal";
								a.util.showmsg.call(w, y.info, o.tiptype, {
										obj: w,
										type: 3,
										sweep: o.tipSweep
									},
									"byajax")
							}
							o.callback && o.callback(y);
							w[0].validform_ajax = null
						},
						error: function(y) {
							var z = "status: " + y.status + "; statusText: " + y.statusText;
							a.util.showmsg.call(w, z, o.tiptype, {
									obj: w,
									type: 3,
									sweep: o.tipSweep
								},
								"byajax");
							o.callback && o.callback(y);
							w[0].validform_status = "normal";
							w[0].validform_ajax = null
						}
					};
					u = d.extend({},
						p, u, {
							dataType: "json"
						});
					w[0].validform_ajax = d.ajax(u)
				} else {
					if (!o.postonce) {
						w[0].validform_status = "normal"
					}
					var k = k || o.url;
					if (k) {
						w.attr("action", k)
					}
					return o.callback && o.callback(w)
				}
			}
			return false
		},
		resetForm: function() {
			var k = this;
			k.each(function() {
				this.reset && this.reset();
				this.validform_status = "normal"
			});
			k.find(".Validform_right").text("");
			k.find(".passwordStrength").children().removeClass("bgStrength");
			k.find(".Validform_checktip").removeClass("Validform_wrong Validform_right Validform_loading");
			k.find(".Validform_error").removeClass("Validform_error");
			k.find("[datatype]").removeData("cked").removeData("dataIgnore").each(function() {
				this.validform_lastval = null
			});
			k.eq(0).find("input:first").focus()
		},
		abort: function() {
			if (this.validform_ajax) {
				this.validform_ajax.abort()
			}
		}
	};
	d.Datatype = a.util.dataType;
	a.prototype = {
		dataType: a.util.dataType,
		eq: function(l) {
			var k = this;
			if (l >= k.forms.length) {
				return null
			}
			if (! (l in k.objects)) {
				k.objects[l] = new a(d(k.forms[l]).get(), {},
					true)
			}
			return k.objects[l]
		},
		resetStatus: function() {
			var k = this;
			d(k.forms).each(function() {
				this.validform_status = "normal"
			});
			return this
		},
		setStatus: function(k) {
			var l = this;
			d(l.forms).each(function() {
				this.validform_status = k || "posting"
			});
			return this
		},
		getStatus: function() {
			var l = this;
			var k = d(l.forms)[0].validform_status;
			return k
		},
		ignore: function(k) {
			var l = this;
			var k = k || "[datatype]";
			d(l.forms).find(k).each(function() {
				d(this).data("dataIgnore", "dataIgnore").removeClass("Validform_error")
			});
			return this
		},
		unignore: function(k) {
			var l = this;
			var k = k || "[datatype]";
			d(l.forms).find(k).each(function() {
				d(this).removeData("dataIgnore")
			});
			return this
		},
		addRule: function(n) {
			var m = this;
			var n = n || [];
			for (var l = 0; l < n.length; l++) {
				var p = d(m.forms).find(n[l].ele);
				for (var k in n[l]) {
					k !== "ele" && p.attr(k, n[l][k])
				}
			}
			d(m.forms).each(function() {
				var o = d(this);
				a.util.enhance.call(o, this.settings.tiptype, this.settings.usePlugin, this.settings.tipSweep, "addRule")
			});
			return this
		},
		ajaxPost: function(k, m, l) {
			var n = this;
			d(n.forms).each(function() {
				if (this.settings.tiptype == 1 || this.settings.tiptype == 2 || this.settings.tiptype == 3) {
					c()
				}
				a.util.submitForm.call(d(n.forms[0]), this.settings, k, l, "ajaxPost", m)
			});
			return this
		},
		submitForm: function(k, l) {
			var m = this;
			d(m.forms).each(function() {
				var n = a.util.submitForm.call(d(this), this.settings, k, l);
				n === b && (n = true);
				if (n === true) {
					this.submit()
				}
			});
			return this
		},
		resetForm: function() {
			var k = this;
			a.util.resetForm.call(d(k.forms));
			return this
		},
		abort: function() {
			var k = this;
			d(k.forms).each(function() {
				a.util.abort.call(this)
			});
			return this
		},
		check: function(m, k) {
			var k = k || "[datatype]",
				o = this,
				n = d(o.forms),
				l = true;
			n.find(k).each(function() {
				a.util.check.call(this, n, "", m) || (l = false)
			});
			return l
		},
		config: function(k) {
			var l = this;
			k = k || {};
			d(l.forms).each(function() {
				var m = d(this);
				this.settings = d.extend(true, this.settings, k);
				a.util.enhance.call(m, this.settings.tiptype, this.settings.usePlugin, this.settings.tipSweep)
			});
			return this
		}
	};
	d.fn.Validform = function(k) {
		return new a(this, k)
	};
	function h(n, m) {
		var l = (d(window).width() - n.outerWidth()) / 2,
			k = (d(window).height() - n.outerHeight()) / 2,
			k = (document.documentElement.scrollTop ? document.documentElement.scrollTop: document.body.scrollTop) + (k > 0 ? k: 0);
		n.css({
			left: l
		}).animate({
				top: k
			},
			{
				duration: m,
				queue: false
			})
	}
	function c() {
		if (d("#Validform_msg").length !== 0) {
			return false
		}
		j = d('<div id="Validform_msg"><div class="Validform_title">' + e.tit + '<a class="Validform_close" href="javascript:void(0);">&chi;</a></div><div class="Validform_info"></div><div class="iframe"><iframe frameborder="0" scrolling="no" height="100%" width="100%"></iframe></div></div>').appendTo("body");
		j.find("a.Validform_close").click(function() {
			j.hide();
			i = true;
			if (g) {
				g.focus().addClass("Validform_error")
			}
			return false
		}).focus(function() {
			this.blur()
		});
		d(window).bind("scroll resize",
			function() { ! i && h(j, 400)
			})
	}
	d.Showmsg = function(k) {
		c();
		a.util.showmsg.call(f, k, 1, {})
	};
	d.Hidemsg = function() {
		j.hide();
		i = true
	}
})(jQuery, window);